package edu.wayne.cs.csc4110.hw6.interfaces.plugin;

import java.awt.event.KeyListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import edu.wayne.cs.csc4110.hw6.interfaces.user.UserFactory;

public interface Plugin extends KeyListener, MouseListener, MouseMotionListener {

	/**
	 * Gets the plugin user extension used to save the game state of the active user
	 * @return the user extension i.e ".met"
	 */
	public String getUserExtension();
	/**
	 * @return true if the game is over, false otherwise
	 */
	public boolean isOver();

	/**
	 * This will specify the JFrame title as well
	 * 
	 * @return the title of the game
	 */
	public String getGameTitle();

	/**
	 * Initialization of any game items goes here, also any menu selection/game
	 * options
	 */
	public void onStart();

	/**
	 * Called when a plugin#isOver() returns true
	 */
	public void onFinish();

	/**
	 * The Width of the plugin screen
	 * 
	 * @return int width of plugin
	 */

	public int getWidth();

	/**
	 * The Height of the plugin screen
	 * 
	 * @return int height of plugin
	 */
	public int getHeight();

	/**
	 * The delay of each screen update
	 * 
	 * @return time in milliseconds of delay between screen updates
	 */
	public int getDelay();

	/**
	 * Gets the UserFactory to create the right user
	 * 
	 * @return the Concrete UserFactory for creating the user
	 */
	public UserFactory getUserFactory();

}
